#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "modifysqldata.h"
#include "infosave.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    window_Table_Init();
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::createDB(void){//创建数据库
    //建立和SQlite QSQLITE数据库连接
    db = QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库文件的名称
    db.setDatabaseName("schoolTestDB.db");
    //打开数据库
    if(db.open() == false){

        QMessageBox::critical(this,"DataError",
                              db.lastError().text());
        ui -> sql_Data_State -> setText("连接失败");
        ui -> sql_Data_State ->setStyleSheet("color:red");
    }
    else {
        ui -> sql_Data_State -> setText("连接成功");
        ui -> sql_Data_State ->setStyleSheet("color:green");
    }

}

void MainWindow::createTable(void){//创建表
    //构建创建表的SQL语句
    QString createSql =
            QString("CREATE TABLE %1(\
                '课程编号' INT PRIMARY KEY NOT NULL,\
                '课程名称' TEXT NOT NULL,\
                '任课教师' TEXT NOT NULL,\
                '学分' REAL NOT NULL,\
                '课程性质' TEXT NOT NULL,\
                '开课院系' TEXT NOT NULL)").arg(tableName);
     QSqlQuery query;
     query.exec(createSql);

     ui -> sql_Name -> setText(tableName);
     ui -> sql_Name ->setStyleSheet("color:green");
//     exec创建数据表

}


void MainWindow::queryTable(void){//查询表
    QString str = QString("SELECT * FROM %1").arg(tableName);
    model.setQuery(str);
    ui->sqlite_View->setModel(&model);

    qDebug() << "str:" + str;
}

void MainWindow::window_Table_Init(void)
{

    setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint);    // 禁止最大化按钮

    setFixedSize(this->width(),this->height());                     // 禁止拖动窗口大小

    ui->sqlite_View->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

//    ui->sqlite_View->verticalHeader()->hide();

    ui->sqlite_View->verticalHeader()->hide();//    隐藏第一列

    ui->sqlite_View->setAlternatingRowColors(true);//使表格颜色交错功能为真
//设置表头颜色
    ui->sqlite_View->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgb(2,20,130);color: white;}");//设置表头背景和字体颜色

//    ui->sqlite_View->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中


}

void MainWindow::closeSqlConnet()
{
    db.close();
    ui -> sql_Data_State -> setText("数据库连接关闭");
    ui -> sql_Data_State ->setStyleSheet("color:red");
    ui -> sql_Name -> setText("数据库已关闭");
    ui -> sql_Name ->setStyleSheet("color:red");
}

//刷新页面
void MainWindow::on_btn_Refresh_clicked()
{
    if(db.open() == false)
    {
        QMessageBox::information(NULL, "打开错误", "数据库未连接");
    }
    else
        queryTable();
}

//跳转添加页面
void MainWindow::on_btn_Add_clicked()
{
    if(db.open() == false)
    {
        QMessageBox::information(NULL, "打开错误", "数据库未连接");
    }
    else
    {
        sqlAddPage *sA = new sqlAddPage();
        sA->show();
    }

}

void MainWindow::on_btn_query_clicked()
{
    if(db.open() == false)
    {
        QMessageBox::information(NULL, "打开错误", "数据库未连接");
    }
    else
    {
        sqlQuery *sQ = new sqlQuery();
        sQ->show();
    }

}

//修改参数传递 页面跳转
void MainWindow::on_btn_Edit_clicked()
{
    qDebug()<<"input emit" + keyId;
//    emit sendData(keyId);
    modifySqlData *mSQ = new modifySqlData();
    mSQ->getIdInfo(keyId);
    mSQ->show();

}

//保存页面
void MainWindow::on_btn_DataSave_clicked()
{
    if(db.open() == false)
    {
        QMessageBox::information(NULL, "打开错误", "数据库未连接");
    }
    else
    {
        infoSave *i = new infoSave;
        i->show();
    }

}


//获取图表点击事件 QModelIndex获取到的数据模型
void MainWindow::on_sqlite_View_clicked(const QModelIndex &index)
{
//    获取列数据 siblingAtColumn模型
    keyId = index.siblingAtColumn(0).data().toString();
    qDebug()<<"keyId:" + keyId;
}

//删除数据库数据
void MainWindow::on_btn_Del_clicked()
{
    if(db.open() == false)
    {
        QMessageBox::information(NULL, "打开错误", "数据库未连接");
    }
    else
    {
        QSqlQuery query;
    //    注意数据库操作时符号很重要，例如双引号变单引号就不行
        QString dropRowId = QString("delete from qTableInfo where 课程编号 = %1").arg(keyId);
    //    检查获取id是否正确
        qDebug()<< dropRowId;
        //执行sql语句
        query.exec(dropRowId);
        queryTable();
    }

}


void MainWindow::on_btn_ConnetSql_clicked()
{
    QString strFlag = ui->btn_ConnetSql->text();

    if(strFlag == "打开数据库")
    {
        createDB();
        createTable();
        queryTable();
        qDebug()<<"Open";
        ui->btn_ConnetSql->setText("关闭数据库");
    }
    else if(strFlag == "关闭数据库")
    {
        qDebug()<<"Close";
        ui->btn_ConnetSql->setText("打开数据库");
        closeSqlConnet();
    }
}




